# encoding:utf-8
'''
@author : xaing
@time : 2019/4/4 11:09
@地址 : 广州
@作用 : 图片相关的工具类
@结果 :
'''


# 判断图片的真实类型
import imghdr
from version1 import checkUtils, fileUtils, common
import os
import requests


def getImgType(imgFile):
    '''
    判断图片的真实类型，可用于对恶意修改图片后缀的图片木马进行检测
    :param imgFile: 图片路径
    :return: 图片的后缀
    '''
    return imghdr.what(imgFile)



def downImgSingle(filePath, imgUrl, imgName):
    '''
    单图片下载
    :param filePath: 文件夹路径
    :param imgUrl: 下载图片的url
    :param imgName: 下载后命名的图片名，不需要加后缀
    :return:
    '''
    if common.checkNull(filePath):
        raise Exception("文件夹路径 不能为空")
    if common.checkNull(imgUrl):
        raise Exception("下载图片的url 不能为空")
    if common.checkNull(imgName):
        raise Exception("图片名 不能为空")

    # 判断是否文件夹
    if not os.path.exists(filePath):
        # 不存在则创建
        os.makedirs(filePath)

    if fileUtils.isFile(filePath):
        raise Exception("图片存储路径不能是一个文件，只能是一个文件夹:" + common.outStr(filePath))

    if not checkUtils.isUrlValid(imgUrl):
        raise Exception("这不是一个有效的网络地址:" + common.outStr(imgUrl))

    # 获取图片的后缀，根据url来获取的，示例: .jpg
    imgType = os.path.splitext(imgUrl)[1]
    # 拼接图片的路径 + 图片名
    imgPath = filePath + "//" + imgName + imgType
    with open(r'' + imgPath + '', 'wb') as f:
        html = requests.get(imgUrl)
        # 写入图片
        f.write(html.content)




def downImgBatch(filePath, imgUrls, forceCheck):
    '''
    批量下载图片，图片命名会从 0 开始一直累加
    :param filePath: 文件夹的位置
    :param imgUrls: list集合，图片存储在这里
    :param forceCheck: 是否检测文件夹是否为空，为true则检测是否空文件夹，非空文件夹不能下载
    :return:
    '''
    if common.checkNull(filePath):
        raise Exception("文件夹路径 不能为空")

    if not os.path.exists(filePath):
        # 不存在则创建
        os.makedirs(filePath)

    if len(imgUrls) == 0:
        raise Exception("不存在要下载的图片")

    if forceCheck:
        if not fileUtils.isNullFile(filePath):
            raise Exception("文件夹不是空的，下载的图片可能会覆盖其他文件，请使用空文件夹：" + common.outStr(filePath))

    # 图片的名字
    imgName = 0

    for img in imgUrls:
        if not checkUtils.isUrlValid(img):
            common.printStr("不是一个有效的网络地址，跳过下载:", img)
            continue

        # 获取图片的后缀，根据url来获取的，示例: .jpg
        imgType = os.path.splitext(img)[1]
        # 拼接图片的路径 + 图片名
        imgPath = filePath + "//" + str(imgName) + imgType
        with open(r'' + imgPath + '', 'wb') as f:
            html = requests.get(img)
            f.write(html.content)

            imgName += 1


